题 目:FLASH中的抛物运动
抛物运动是物体受外力开始运动后,没有再受到外力的作用,其水平运动和垂直运动是彼此独立的。不考虑空气阻力的影响,水平方向的运动是匀速直线运动,垂直方向的运动是自由落体运动
下面我们试着用程序来模拟平抛运动
步骤:
1. 新建文件800*400像素其他的默认;
2. "ctrl"+F8,创建一个影片剪辑,名称“MC”
3. 回到主场景,"ctrl"+L打开库面版,把刚创建的影片剪辑拖入到舞台,
4. 选中这个MC,打开对齐面版,相对于舞台---左对齐----底对齐,绑定代码:
onClipEvent(load){//MC被加载时,只运行一次
x0=_x;
y0=_y;//初使位置
v=0; //球的速度
rad=0;//球的角度,初使值为0
t=0; //运动时间
dragtime=0; //小球开始拖动的时间;
isdrag=0; //判断球是否被拖动的变量;
isout=0;//判断球是否抛出去了
g=-0.098;//地心的引力常量
}
onClipEvent(mouseDown){//当鼠标按下
if(hitTest(_root._xmouse,_root._ymouse,true)){//判断鼠标是否和小球接触
isdrag=1;//如果接触的话,就返回isdrag的值为1,目的只是用来做记号,告诉后面的程序执行相关的事件;
isout=0;
v=0;
rad=0;
this.startDrag();//开始拖动
dragtime=getTimer();//获得拖动的时间
}
}
onClipEvent(mouseUp){//松开鼠标
if(isdrag==1){
isdrag=0;
isout=1;
t=1;
rad=Math.atan2(_y-y0,_x-x0);//弧度为单位计算并返回 y/x 的反正切
v=Math.sqrt((_x-x0)*(_x-x0)+(_y-y0)*(_y-y0))/(getTimer()-dragtime);
//勾股定理,再用公式:v=s/t求出速度;
this.stopDrag();//停止拖动
}
}
onClipEvent(enterFrame){//进入贞,MC的Frame不断运行
if(isout==1){
_x+=v*Math.cos(rad)*t;
_y+=v*Math.sin(rad)*t-(g*t*t)/2;//见图解(平抛运动的公式)
t++;//t=t+1;
if(_x>800 or _y>400 ){//如果超出舞台的范围,就重设置MC的位置
isout=0;
_x=x0;
_y=y0;
}
}
}
补充:由于抛物运动把时间计算在内的,所以不能单*enterFrame时事件改变小球的位置
加入变量“t”,每次触发enterFrame事件时,代表一个单位的时间变化,我这里用的是12.0fps
|